package com.jhy.suixianglu.shuangzhizhen.daima20230118;

/**
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 *
 * 基本思路就是两个指针
 * 一个指针指向开头
 * 例外一个指针指向的是n+1的位置
 * 知道fast指针指向为null的时候 我们就停止呢
 *
 */
public class RemoveNthFromEnd {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // 定义一个虚拟头节点
        ListNode dnode = new ListNode(-1, head);
        // 定义两个快慢指针
        ListNode fast = dnode;
        ListNode slow = dnode;
        for (int i = 0; i < n+1; i++) {
            fast  = fast.next;
        }
        while(fast != null){
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return dnode.next;
    }

}

